home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
os2
/
ftree10f.zip
/
ImGedcom.ftx
< prev
next >
Wrap
Text File
|
1996-05-25
|
15KB
|
503 lines
/*
Family Tree Rexx Script FTX
Copyright (C) 1996 by <Nils Meier>
Please send comments to / Kommentar bitte an
meier2@athene.informatik.uni-bonn.de
<This script imports a family tree from a GEDCOM file
/ Dieses Skript importiert einen Stammbaum aus einer GEDCOM Datei.>
*/
/* ----------------------- Params / Parameter ------------------- */
datasex = 'MW'
datamonth = 'JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC'
crlf = '0d0a'x
IF getLanguage()='Deutsch' THEN DO
header = 'Importieren von GEDCOM-Daten :'
select = 'GEDCOM-Import-Datei angeben:'
fileerror = 'Fehler: Einladen von '
nogedcom = 'Fehler: Keine GEDCOM-Datei '
foundheader = 'HEADER gefunden !'
done = 'Fertig !'
sourceis = 'Quellsystem ist '
sourcedate = 'Hergestellt am '
unexpected = 'Unerwartetes Ende der Datei !'
ignoring = 'Beim Einlesen wurden ignoriert: '
oopsDate = 'Undeutliches Datum : '
oopsSex = 'Undeutliches Geschl : '
oopsID = 'Undeutliche ID : '
importstart = 'Starte jetzt Berechnung des Stammbaumes !'crlf'Die letzte Person aus der GEDCOM-Datei wird Ursprung :'
END
ELSE DO
header = 'Importing from GEDCOM :'
select = 'Select GEDCOM file for import:'
fileerror = 'Error: Reading from '
nogedcom = 'Error: No GEDCOM file '
foundheader = 'Found HEADER !'
done = 'Done !'
sourceis = 'Source system is '
sourcedate = 'Produced at '
unexpected = 'Unexpected end of file !'
ignoring = 'Had to ignore during load:'
oopsDate = 'Ambiguous Date : '
oopsSex = 'Ambiguous Sex : '
oopsID = 'Ambiguous ID : '
importstart = 'Starting Calculation of family tree !'crlf'Last person in GEDCOM-file becomes Origin :'
END
/* ----------------- Display Header / Kopf der Ausgabe ------------- */
SAY(header||DATE())
SAY('')
/* ------------------- Open file / Datei oeffnen ---------------- */
file=getFileName(select,'*.GED')
IF (file='') THEN DO
SAY(done)
RETURN
END
rc=LINEIN(file,1,0)
rc=LINES(file)
IF (rc=0) THEN DO
SAY(fileerror||file)
RETURN
END
/* -------------- Header of GEDCOM / Kopf von GEDCOM -------------- */
input=LINEIN(file)
PARSE VAR input lev tag
IF (lev<>0)|(tag<>'HEAD') THEN DO
SAY(nogedcom||file||' (Expected 0 HEAD)')
RETURN
END
SAY(foundheader)
rc=inputFromGedcom()
DO FOREVER
PARSE VAR input lev tag value
SELECT
WHEN rc<>'' THEN LEAVE
WHEN lev='0' THEN LEAVE
WHEN tag='SOUR' THEN SAY(sourceis||'"'||value||'"')
WHEN tag='DATE' THEN SAY(sourcedate||'"'||value||'"')
OTHERWISE NOP
END
rc=waitLev(1)
END
SAY('')
IF rc<>'' THEN DO
SAY(rc)
RETURN
END
/* ---- Read Persons&Families / Personen und Familien einlesen --- */
PIgnored=''
FIgnored=''
SIgnored=''
DO FOREVER
PARSE VAR input lev tag1 tag2 rest
/* Check for INDI & FAM / Suchen nach INDI & FAM */
SELECT
WHEN rc<>'' THEN LEAVE
WHEN tag2='INDI' THEN rc=readPerson()
WHEN tag2='FAM' THEN rc=readFamily()
WHEN tag1='TRLR' THEN LEAVE
OTHERWISE DO
IF WORDPOS(tag2,SIgnored)=0 THEN SIgnored=SIgnored tag2
rc=waitLev(0)
END
END
/* Next Datapacket / Naechster Datensatz */
END
SAY('')
/* ------------------ End of Import / Ende des Imports --------------- */
IF rc='' THEN DO
SAY(ignoring '(Structs)')
SAY(SIgnored)
SAY('')
SAY(ignoring '(in INDI)')
SAY(PIgnored)
SAY('')
SAY(ignoring '(in FAM)')
SAY(FIgnored)
SAY('')
SAY(importstart)
SAY(importDone())
SAY(done)
END
ELSE
SAY(rc)
RETURN
/* =============== Read Functions / Lesefunktionen =============== */
/* ------------- Read Person / Person einlesen ------------------ */
readPerson:
id=WORD(input,2) /* Needed for Ambiguous */
PID =calcID(id)
PAddr =''
PNote =''
IF PID=0 THEN RETURN(waitLev(0))
rc=importPerson()
ok=setPID(PID)
rc=inputFromGedcom() /* input = lev tag value */
DO FOREVER
lev = WORD(input,1)
tag = WORD(input,2)
value=SUBWORD(input,3)
/* ---- Take data / Daten übernehmen --- */
SELECT
/*-------------------------------------------*/
WHEN rc<>'' THEN RETURN(rc||'('||id||')')
WHEN lev=0 THEN LEAVE
/*-------------------------------------------*/
WHEN tag='NAME' THEN DO
PARSE VAR value fname1 '/' name '/' fname2
ok=setName(STRIP(name))
ok=setFirstName(STRIP(fname1||fname2))
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='SEX' THEN DO
ok=setSex(calcSex(value))
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='BIRT' THEN DO
rc=inputFromGedcom() /* input = lev tag value */
DO FOREVER
lev=WORD(input,1)
tag=WORD(input,2)
SELECT
WHEN rc<>'' THEN LEAVE
WHEN lev<=1 THEN LEAVE
WHEN tag='DATE' THEN ok=setBirthDate(calcDate(SUBWORD(input,3)))
WHEN tag='PLAC' THEN ok=setBirthPlace(SUBWORD(input,3))
OTHERWISE NOP
END
rc=waitLev(2)
END
END
/*-------------------------------------------*/
WHEN tag='DEAT' THEN DO
rc=inputFromGedcom() /* input = lev tag value */
DO FOREVER
lev=WORD(input,1)
tag=WORD(input,2)
SELECT
WHEN rc<>'' THEN LEAVE
WHEN lev<=1 THEN LEAVE
WHEN tag='DATE' THEN ok=setDeathDate(calcDate(SUBWORD(input,3)))
WHEN tag='PLAC' THEN ok=setDeathPlace(SUBWORD(input,3))
OTHERWISE NOP
END
rc=waitLev(2)
END
END
/*-------------------------------------------*/
WHEN tag='PHOT' THEN DO
ok=setPicture(value)
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='OCCU' THEN DO
ok=setOccupation(value)
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='ADDR' THEN DO
addr=value
rc=inputFromGedcom() /* input = lev tag value */
DO FOREVER
lev=WORD(input,1)
tag=WORD(input,2)
SELECT
WHEN rc<>'' THEN LEAVE
WHEN lev<=1 THEN LEAVE
WHEN tag='CONT' THEN addr=addr||','||SUBWORD(input,3)
WHEN tag='PHON' THEN addr=addr||','||SUBWORD(input,3)
OTHERWISE NOP
END
rc=waitLev(2)
END
IF PAddr<>'' THEN PAddr=PAddr||','
PAddr=PAddr||addr
END
/*-------------------------------------------*/
WHEN tag='PHON' THEN DO
IF PAddr<>'' THEN PAddr=PAddr||','
PAddr=PAddr||value
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='NOTE' THEN DO
PNote=value
rc=inputFromGedcom() /* input = lev tag value */
DO FOREVER
lev=WORD(input,1)
tag=WORD(input,2)
SELECT
WHEN rc<>'' THEN LEAVE
WHEN lev<=1 THEN LEAVE
WHEN tag='CONT' THEN PNote=PNote||crlf||SUBWORD(input,3)
OTHERWISE NOP
END
rc=waitLev(2)
END
END
/*-------------------------------------------*/
/*
WHEN tag='FAMC' THEN DO
PChildren=PChildren value
rc=waitLev(1)
END
/*-------------------------------------------*/
WHEN tag='FAMS' THEN DO
PSpouses=PSpouses value
rc=waitLev(1)
END
*/
/*----------------------------------------